package ar.frba.utn.disenio.aterrizar.com.parte1;

public class Calendario {

	private int[] meses = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
	
	public void setMeses(int [] meses) {
		this.meses = meses;
	}

	public int [] getMeses() {
		return meses;
	}

	public boolean sonIguales(Fecha fecha1, Fecha fecha2) {
		Boolean coincidenDias = (fecha1.getDia() == fecha2.getDia());
		Boolean coincidenMeses = (fecha1.getMes() == fecha2.getMes());
		Boolean coincidenAnios = (fecha1.getAnio() == fecha2.getAnio());
		Boolean resultado = coincidenDias && coincidenMeses && coincidenAnios;
		return resultado;
	}

	public int calcularDiferenciaEnDiasEntre(Fecha fecha1, Fecha otraFecha) {
		
		int diferenciaEnDias = 0;

		if (!this.sonIguales(fecha1, otraFecha))
		{
			if (this.laPrimeraEsAnteriorALaSegunda(fecha1, otraFecha))
				diferenciaEnDias = this.diasDesdeHasta(fecha1, otraFecha);
			else
				diferenciaEnDias = this.diasDesdeHasta(otraFecha, fecha1);
		}

		return diferenciaEnDias;
	}

	private int diasDesdeHasta(Fecha fechaAnterior, Fecha fechaPosterior) {
		int diasPasados = 0;
		int i;
		diasPasados = (fechaPosterior.getAnio() - fechaAnterior.getAnio()) * 365;

		if (fechaAnterior.getMes() < fechaPosterior.getMes())
			for (i = fechaAnterior.getMes(); i < fechaPosterior.getMes(); i++)
				diasPasados += this.meses[i];
		if (fechaAnterior.getMes() > fechaPosterior.getMes())
			for (i = fechaPosterior.getMes(); i < fechaAnterior.getMes(); i++)
				diasPasados -= this.meses[i];

		if (fechaAnterior.getDia() < fechaPosterior.getDia())
			for (i = fechaAnterior.getDia(); i < fechaPosterior.getDia(); i++)
				diasPasados++;
		if (fechaAnterior.getMes() > fechaPosterior.getMes())
			for (i = fechaPosterior.getDia(); i < fechaAnterior.getDia(); i++)
				diasPasados--;

		return diasPasados;
	}

	public boolean laPrimeraEsAnteriorALaSegunda(Fecha fecha1, Fecha fecha2)
	{
		boolean resultado = false;
        
		if (fecha1.getAnio() != fecha2.getAnio())
                resultado = fecha1.getAnio() < fecha2.getAnio();
        else
        {
        	if(fecha1.getMes() != fecha2.getMes())
        		resultado = fecha1.getMes() < fecha2.getMes();
            else
                resultado = fecha1.getDia()<fecha2.getDia();
        }
        return resultado;
		
	}

}